package cz.cvut.fit.mi.par.b101.mgc.stack;

import cz.cvut.fit.mi.par.b101.mgc.Node;

/**
 * Třída <code>Stack</code> reprezentuje zásobník.
 *
 * @author masekji4
 */
public class Stack {

    private Element top;

    /**
     * Vytvoří novou instanci zásobníku.
     */
    public Stack() {
        this.top = null;
    }

    /**
     * Vloží uzel cesty do zásobníku.
     *
     * @param element       uzel cesty
     */
    public void push(Node node) {
        top = new Element(node, top);
    }

    /**
     * Vrátí poslední vložený uzel cesty ze zásobníku.
     *
     * @return              uzel cesty
     */
    public Node pop() {
        Element result = top;

        top = result != null ? result.getPred() : null;

        return result.getNode();
    }

    /**
     * Vrátí <code>true</code>, je-li zásobník prázdný.
     * 
     * @return          <code>true</code>, je-li zásobník prázdný
     */
    public boolean isEmpty() {
        return top == null;
    }
}
